MySQL小记 您所在的位置:网站首页 MySQL DQL查询 MySQL小记

MySQL小记

2023-06-05 21:36| 来源: 网络整理| 查看: 265

目录

数据库概念

关系型数据库

MySQL使用

SQL语言

sql分类

DDL:操作数据库和表

操作数据库

操作表

DML:数据操作语言,用来增删改数据库记录

1.插入数据

2.删除数据

3.修改数据

DQL:查询

条件查询

模糊查询

字段的运算和去重

排序 order by

聚合函数

分组 group by 

分页 limit

数据库概念

存储数据的仓库,用于存储和管理数据

关系型数据库

由行和列组成的这种二维表,而且表和表之间有对应关系。

MySQL就是关系型数据库的一种。

MySQL使用

1.登录

cmd-->mysql -uroot -p密码

2.退出

exit

SQL语言

结构化查询语言

通过sql语言可以操作所有的关系型数据库。每种数据库之间会存在差异,称为 "方言"。

sql分类

DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等; DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(增、删、改) DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别; DQL(Data Query Language):数据查询语言,用来查询记录(数据)。

DDL:操作数据库和表 操作数据库

创建:create database 数据库名称;

删除:drop database 数据库名称;

修改字符集:alter database 数据库名称 character set gbk;

查询:show databases;   查询所有数据库名称

            show create database 数据库名称;      查看建库语句,可以看到编码

切换库:use 库名

操作表

就是创建表头(列,字段)

常见字段的数据类型:

     int:整型 id int,      * double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;     money double(5,2)       char(10):固定长度字符串类型;       name char(10)        "张三"       varchar(10):可变长度字符串类型;        例:name varchar(10)    "张三"                     text:字符串类型;存大格式的文本 比如存个小说 一般不用        blob:字节类型;存字节类型的数据  比如电影字节  图片字节 但是一般不会把字节数据存到数据库当中         date:日期类型,格式为:yyyy-MM-dd; 2020-10-12         time:时间类型,格式为:hh:mm:ss 14:30:30         datetime:日期时间类型   yyyy-MM-dd hh:mm:ss 2020-10-12 14:30:30         * timestamp:时间戳类型     yyyy-MM-dd hh:mm:ss         * 如果该类型的字段不给赋值,则默认当前时间

创建:

create table 表名(

            列名1 类型1,             列名2 类型2,                ...              列名n 类型n

);

create table student(     id int, -- 编号     sname varchar(10), -- 姓名     age int, -- 年龄     sal double(6,2), -- 工资     birthday date -- 生日 );

删除表:  drop table 表名;

查看库中所有表:show tables;

查看表结构:desc 表名;

增加一个表头:alter table student add(phone char(11));

删除一个表头:alter table student drop phone;

修改表头名称:alter table student change id sid int;

修改表头数据类型:alter table student modify sal int ;

或:alter table student change sal sal double(5,2);

修改表名:alter table student rename to stu;

DML:数据操作语言,用来增删改数据库记录 1.插入数据

插入所有:

insert into student(id,name,age)  values (1,'zhangsan',23);

简写:

insert into student values (1,'zhangsan',23);

个别字段插入:

insert into student(id,name) values(2,'lisi');

2.删除数据

1.全部删除:

delete from student;

2.where  条件删除   

=、!=、=、and (&&) 、or (||)

delete from student where id=1;

3.修改数据

1.没有条件修改

update student set sname='wangwu',age=30;

2.有条件修改

update student set sname='zhangsan',age=20 where id=1;

DQL:查询

1.查询表中所有数据

select * from student;

建议全写,而不是写个*

select id,sname,age,sal,birthday from student;

2.查询个别字段

select sname,id from student;

条件查询

=、!=、(不等于)、=;

BETWEEN…AND;  在什么范围之间 IN(set); IS NULL;为空 IS NOT NULL; 不为空 AND; 并且 OR;   或者 NOT;非

1.等值查询

select * from emp where empno=7566;

2.between....and

select * from emp where sal between 2000 and 5000;

3.in

select * from emp where empno in(7499,7788,7934,55555);

4.null值(is null / is not null)

select * from emp where comm is null;

5.as 字段别名     as可不写

select empno as 员工工号,ename as 员工姓名,sal 工资 from emp;

select empno 员工工号,ename 员工姓名,sal 工资 from emp;

6.表别名

select empno 员工工号,ename 员工姓名,sal 工资 from emp e where e.empno=7499;

模糊查询

% 通配多个任意字符

_ 通配单个任意字符

1.姓名包含M

select * from emp as e where ename like '%M%';

2.以S开头

select * from emp as e where ename like 'S%';

3.以S结尾

select * from emp as e where ename like '%S';

4.第二个字母是A

select * from emp as e where ename like '_A%';

5.五个字母组成

select * from emp as e where ename like '_____';

字段的运算和去重

查询年薪

SELECT empno,ename,sal,comm,sal*12 AS 年薪 FROM emp;

null值参与运算结果是null,若想要把null值当作0,用ifnull

IFNULL(comm,0) 如果comm是null,就取0 不是null 取你原本的值

去重

select distinct sal from emp where sal=3000;

排序 order by

升序 asc

降序 desc

聚合函数

对列做运算

-- 统计员工有多少人 SELECT COUNT(empno) AS 总人数 FROM emp;

-- 传入* 也可以 SELECT COUNT(*) AS 总人数 FROM emp;

-- 工资最值 SELECT MAX(sal) AS 最高工资  FROM emp;  SELECT MIN(sal) AS 最低工资  FROM emp; 

-- 平均工资 SELECT AVG(sal) AS 平均工资  FROM emp; 

-- 总工资 SELECT SUM(sal) AS 总工资  FROM emp; 

分组 group by 

和聚合函数配合使用

-- 比如我按部分编号分组  比如有三个部门 然后我求每个部门的平均工资  那展示出来的数据应该有三条

SELECT deptno '部门编号',AVG(sal) '部门的平均工资' FROM emp GROUP BY deptno;

-- 按照岗位分组,统计每种岗位多少人

SELECT job '岗位',COUNT(job) '岗位人数' FROM emp GROUP BY job;

-- 1.例如查询 每个部门的部门编号 以及每个部门工资大于1500的人数,分组之前要进行筛选

-- where 在分组之前进行条件的筛选,符合条件的参与分组,不符合条件的不参与分组。 SELECT deptno '部门编号',COUNT(empno) '部门人数' FROM emp WHERE sal>1500 GROUP BY deptno;

-- 2.例如 我要查询 各个部门平均工资 大于2000 的部门

-- having:在分组之后,对结果集的筛选 SELECT deptno '部门编号',AVG(sal) '部门的平均工资' FROM emp GROUP BY deptno HAVING AVG(sal)>2000;

SELECT deptno '部门编号',AVG(sal) '部门的平均工资' FROM emp GROUP BY deptno HAVING 部门的平均工资>2000;

-- 3. 例如我要查询 各个部门  员工工资大于1500 的平均工资  并且平均工资 大于2000的部门 SELECT deptno '部门编号',AVG(sal) '部门的平均工资' FROM emp WHERE sal>1500 GROUP BY deptno HAVING 部门的平均工资>2000;

-- having 和where的区别?              -- * where和having         --     * where:在分组之前对条件进行限定。不满足条件,就不会参与分组         -- * having:在分组之后,对结果集的筛选                                    -- 4. 例如我要查询 各个部门  员工工资大于1500 的平均工资  并且平均工资 大于2000的部门,升序排列 SELECT deptno '部门编号',AVG(sal) '部门的平均工资'  FROM emp WHERE sal>1500  GROUP BY deptno HAVING 部门的平均工资>2000  ORDER BY 部门的平均工资 ASC;    

分页 limit

limit 起始索引,每页的条数

 -- 第一页 SELECT * FROM emp LIMIT 0,3; -- 第二页 SELECT * FROM emp LIMIT 3,3; -- 第三页 SELECT * FROM emp LIMIT 6,3;

-- 第四页 SELECT * FROM emp LIMIT 9,3;

-- 第五页 SELECT * FROM emp LIMIT 12,3;

-- 起始索引=(页码-1)*每页条数



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有